package com.xht.security.core.userdetails;

import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;

/**
 * <h1>描述 ：</h1>
 *
 * @author : 小糊涂
 * @version : 1.0
 **/
@Slf4j
@RequiredArgsConstructor
public class XhtUserDetailsServiceImpl implements XhtUserDetailsService {

    /**
     * 根据用户名定位用户
     *
     * @param username 用户名。
     * @return 完全填充的用户记录（从不null)
     * @throws UsernameNotFoundException 如果找不到用户或用户没有授予权限
     */
    @Override
    @SneakyThrows
    public UserDetails loadUserByUsername(String username) {
        // todo 我们可以在这里进行业务逻辑的书写 例如利用 redis mybatis 等
        log.info("用户查询 username={}", username);
        return User.withDefaultPasswordEncoder()
                .username(username)
                .password(username)
                .roles("admin")
                .authorities("admin")
                .build();
    }

    @Override
    public int getOrder() {
        return Integer.MIN_VALUE;
    }

    /**
     * 是否支持此客户端校验
     *
     * @param clientId String 目标客户端
     * @param grantType String
     * @return true/false
     */
    @Override
    public boolean support(String clientId, String grantType) {
        log.info("支持此客户端校验 clientId={},grantType={}", clientId, grantType);
        return true;
    }
}
